Introducción

Este informe se enmarca en un proyecto de portafolio personal para la práctica de análisis e interpretación de datos usando RStudio. En este caso, se presenta un breve análisis exploratorio de la base de datos Gapminder, que contiene variables socio-económicas para 142 países. El ejercicio propuesto para la práctica de RStudio, consistió en solicitarle a modelos de IA (ChatGPT y Google Gemini) que me asignaran ejercicios de análisis y exploración de datos en aras de prácticar mis habilidades y proceso de aprendizaje en RStudio, es decir, sin especificar el código a ejecutar para completar las tareas propuestas. Además de esto, mediante estos mismos modelos de IA solicité retroalimentación técnica (respecto a la ejecución de las funciones y los operadores) y conceptual-interpretativa.

knitr::opts_chunk$set(echo = TRUE)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(tidyr)
library(janitor)
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(forcats)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ lubridate 1.9.4     ✔ stringr   1.5.1
## ✔ purrr     1.0.4     ✔ tibble    3.3.0
## ✔ readr     2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(knitr)
library(gganimate)
library(gifski)

Cargar datos a analizar

library(gapminder)
data(gapminder)

Parte 1: Exploración de datos

Muestra las primeras 10 filas del conjunto gapminder.

gapminder%>%
  head(10)
## # A tibble: 10 × 6
##    country     continent  year lifeExp      pop gdpPercap
##    <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.
##  2 Afghanistan Asia       1957    30.3  9240934      821.
##  3 Afghanistan Asia       1962    32.0 10267083      853.
##  4 Afghanistan Asia       1967    34.0 11537966      836.
##  5 Afghanistan Asia       1972    36.1 13079460      740.
##  6 Afghanistan Asia       1977    38.4 14880372      786.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.

Hay 12 observaciones por cada país de la base de datos, que corresponde a 12 años de observación.

¿Cuántos países únicos hay en el conjunto?

# podríamos hacer un conteo para mirar qupé países tienen sólo una observación
gapminder%>%
  group_by(country)%>%
  count()
## # A tibble: 142 × 2
## # Groups:   country [142]
##    country         n
##    <fct>       <int>
##  1 Afghanistan    12
##  2 Albania        12
##  3 Algeria        12
##  4 Angola         12
##  5 Argentina      12
##  6 Australia      12
##  7 Austria        12
##  8 Bahrain        12
##  9 Bangladesh     12
## 10 Belgium        12
## # ℹ 132 more rows

Retroalimentación mediante IA:

El modelo de IA al que asigné la revisión de este ejercicio de análisis sugiere que, para precisar más el ejercicio, la función correcta es n_distinct(). Así:

n_distinct(gapminder$country)
## [1] 142

Este resultado es evidentemente más preciso que el anterior.

Promedio de expectativa de vida por continente.

gapminder%>%
  group_by(continent)%>%
  summarise(life_expc_mean=round(mean(lifeExp,na.rm=T),1))%>%
  arrange(desc(life_expc_mean))%>%
  kable(col.names = c("Continent","Life expectation (mean)"))
Continent Life expectation (mean)
Oceania 74.3
Europe 71.9
Americas 64.7
Asia 60.1
Africa 48.9

Se puede apreciar lo que la intuición contextual, es decir, lo que suele ser ya conocido y que, por demás, está más que diagnosticado. Esto es, el reflejo de las desigualdades sociales el sistema mundial, como lo puede expresar no sólo un indicador económico como el PIB per cápita sino métricas como la duración de la vida de los seres humanos y todo aquello que esto implica existencial y socialmente. Aunque este informe no abordará factores más allá de los que acá se relacionan, esta distribuición de la media abre importantes interrogantes acerca de las implicaciones que, por ejemplo, tiene el pertenecer a países que en el pasado fueron colonias, tales como ser los que suelen tener expecativas de vida en años menores que aquellos que fueron potencias coloniales, así como la escases y los conflictos por los recursos naturales, el estrés, la alimentación deficiente, la sociabilidad violenta y las prácticas predatorias, pasando por características en los regímenes políticos y las necesidades básicas que no se satisfacen, más un largo etcétera de dimensiones y trayectorias que podrían complementar cualquier análisis que se hiciese.

Evolución de la expectativa de vida en Colombia desde 1952 hasta 2007.

gapminder%>%
  filter(country=="Colombia",
         year>=1952&year<=2007)%>%
  group_by(year,lifeExp)%>%
  ggplot(aes(x=year,
             y=lifeExp))+
  geom_line()+
  labs(title = "Life expectation in Colombia (1952-2007)",
       x="Year",
       y="Life expectation")+
  theme_classic()+
  geom_point()+
  geom_text(aes(label = round(lifeExp,1)),vjust=-1.5)

Para el caso colombiano, se aprecia una relación visual clara entre el crecimiento del PIB per cápita y el aumento en la expectativa de vida. Aunque también estos incrementos se podrian atribuir a diversos factores enraizados en la estrutura y los cambios socio-políticos, así como en el avance de la medicina y las políticas públicas, la incipiente industria que se desarrolló durante el Frente Nacional sería un factor interesante de analizar en el mejoramiento de las condiciones de vida, tanto en términos laborales como sanitarios.

Parte 2: Análisis de regresión

Delimitación al año 2007.

gapminder2007<-gapminder%>%
  filter(year==2007)

Regresión lineal para estimar la expectativa de vida en función del PIB per cápita

model_lifeexpc_gdppc<-lm(lifeExp~gdpPercap,data=gapminder2007)

Visualización del modelo

summary(model_lifeexpc_gdppc)
## 
## Call:
## lm(formula = lifeExp ~ gdpPercap, data = gapminder2007)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -22.828  -6.316   1.922   6.898  13.128 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 5.957e+01  1.010e+00   58.95   <2e-16 ***
## gdpPercap   6.371e-04  5.827e-05   10.93   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.899 on 140 degrees of freedom
## Multiple R-squared:  0.4606, Adjusted R-squared:  0.4567 
## F-statistic: 119.5 on 1 and 140 DF,  p-value: < 2.2e-16

Interpretación del modelo

El intercepto del modelo es de 5.957e+01, lo que representa que la expectativa de edad estimada en un país cuando el PIB per cápita es 0 o inexistente. Esto, pese a que no tiene sun sentido realista, es el punto de referencia para la operación. El coeficiente de regresión asociado al PIB per cápita es de 6.371e-04, lo cual expresa que por cada dólar adicional en el PIB per cápita, la expectativa de vida sube, en promedio, un 6.371e-04. Este resultado es estadísticamente significativo (p<0.005).

Muestra un gráfico de dispersión con la recta de regresión.

gapminder2007%>%
  ggplot(aes(x=gdpPercap,
             y=lifeExp))+
  geom_point(alpha=.6)+
  geom_smooth(method = "lm")+
  theme_classic()+
  labs(title = "Correlation between GDP per capita and life expectation (2007)",
       x="GDP per capita",
       y="Life expectation")
## `geom_smooth()` using formula = 'y ~ x'

Este gráfico, con su línea de regresión, expresa la relación positiva entre el crecimiento del PIB per cápita y la longevidad. No obstante, la distribución parece estar representando lo que la ley de rendimientos decrecientes planetea, en tanto se observa que el efecto de los incrementos en el PIB per cápita tiene un efecto más pronunciado sobre la expectativa de vida en aquellos países con crecimiento económico bajo, mientras que, a su turno, en países con economías más poderosas el efecto en la variable dependiente se hace marginal en la medida en que los incrementos económicos suben.

Parte 3

#### Transformación del PIB per cápita usando logaritmo natural (log(gdpPercap)) para la regresión.

model_ln<-lm(lifeExp~log(gdpPercap),data=gapminder2007)

Visualización

summary(model_ln)
## 
## Call:
## lm(formula = lifeExp ~ log(gdpPercap), data = gapminder2007)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -25.947  -2.661   1.215   4.469  13.115 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      4.9496     3.8577   1.283    0.202    
## log(gdpPercap)   7.2028     0.4423  16.283   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.122 on 140 degrees of freedom
## Multiple R-squared:  0.6544, Adjusted R-squared:  0.652 
## F-statistic: 265.2 on 1 and 140 DF,  p-value: < 2.2e-16

Compara los resultados de la regresión con y sin transformación. ¿Cuál modelo se ajusta mejor? ¿Por qué?

Ambos modelos correlacionan las mismas variables, sin embargo, como la varible del PIB posee una escala es tan grande, transformar esta mediante el función del logaritmo natural permite el entender el modelo de manera más clara, ya que esta nos arroja la expresión en términos proporcionales, lo cual reduce la escala. Así, en este modelo, el intercepto se encuentra 0.049496, lo cual sería la expectativa de vida asociada a un país cuando el PIB per cápita es 1 dólar (no 0 porque el logaritmo es indefinido y logaritmo natural de 1 es 0). Respecto al coeficiente de correlación, este expresa que en un incremento porcentual (de 1%) en el PIB per cápita tiene un efecto positivo de 0.07292 años más en la expectativa de vida de un país. Ahora, este modelo se ajusta mejor a los datos con base en el R^2, que para este es de 0.6544 y para el anterior fue de 0.4606.

Viscualización del modelo con transformación logarítmica

gapminder2007%>%
  ggplot(aes(x=log(gdpPercap),
             y=lifeExp))+
  geom_point(alpha=.6)+
  geom_smooth(method = "lm")+
  theme_classic()+
  labs(title = "Correlation between GDP per capita and life expectation",
       x="GDP per capita (LogNat)",
       y="Life expectation")
## `geom_smooth()` using formula = 'y ~ x'

Se aprecia una relación más clara que en el gráfico de dispersión anterior, debido a que la transformación logarítmica de la variable independiente hace más lineal la relación, evidenciando que los rendimientos marginales, es decir, adicionales, de la riqueza en la expectativa de vida son decrecientes. No obstante, la tendencia general de la expectativa de vida sigue siendo creciente con el aumento del PIB per cápita.

Parte 4: Exploración Avanzada y Comparación

Evolución temporal: expectativa de vida a lo largo del tiempo por continente

gapminder%>%
  ggplot(aes(x=gdpPercap,
                y=lifeExp,
                color=continent))+
  geom_point(alpha=.5,size=2)+
  theme_classic()+
  labs(title = "Time evolution: life expectation and GDP per capita",
       x="GDP per capita",
       y="Life expectation",
       color="Continent",
       subtitle = "Year: {frame_time}")+
  transition_time(year)+
   ease_aes('linear')

Este pertinente notar la distancia y el rezago que África presenta durante la década de 1990. Además de esto, se evidencia que, a diferencia del resto de continentes, África no presenta un crecimiento económico visual tan acelerado, tal como puede apreciarse con Europa, América y Ásia, mas sí incrementa su expectativa de vida. Lo anterior, podría dar paso a hipótesis más precisas que tomen en cuenta nuevos y diferentes factores que no sólo se limiten al PIB per cápita sino también avances médico-tecnológicos, políticas públicas de salud, mejoras infraestructurales, acceso a mejores recursos (como la calidad del agua potable), entre otros a considerar.

Comparación entre países de cada continente

Tomaremos una muestra aleatoria: un país por cada continente

# muestra aleatoria # se debe desagrupar luego sacar la muestra
gapminder%>%
  distinct(continent,country)%>%
  group_by(continent)%>%
  slice_sample(n=1)%>%
  ungroup()
## # A tibble: 5 × 2
##   continent country          
##   <fct>     <fct>            
## 1 Africa    Equatorial Guinea
## 2 Americas  Panama           
## 3 Asia      Hong Kong, China 
## 4 Europe    Hungary          
## 5 Oceania   New Zealand

Delimitación para comparar

countries_comp<-gapminder%>%
  filter(country=="Somalia"|
           country=="Jamaica"|
         country=="Yemen, Rep."|
           country=="Montenegro"|
           country=="Australia")

Para poder comparar escalas con medidas tan diferentes como lo son la expectativa de vida y el PIB per cápita, procedemos a normalizar las varibales para poder conseguir una escala común. La fórmula para normalizar es x’=(x-min(x))/(max(x) - min(x)); esto es, valor normalizado (x’) es igual (=) a el valor original (x) menos el valor mínimo de la variable (min(x)) sobre (/) el valor máximo de la variable (max(x)) menos (-) el valor mínimo de la variable (min(x)).

Así, debemos crear los valores normalizados para las variables a comparar: expectativa de vida y PIB per cápita.

# creamos las nuevas variables con los valores normalizados
countries_comp<-countries_comp%>%
  mutate(norm_lifeexpc=(lifeExp-min(lifeExp))/(max(lifeExp)-min(lifeExp)),
         norm_gdppc=(gdpPercap-min(gdpPercap))/(max(gdpPercap)-min(gdpPercap)))

Procedemos a pivotear los datos, lo cual consiste, esencialmente, en transformar datos de un formato a otro. De formato ancho (wide format) a formato largo (long format) y viceversa. Este proceso se realiza para poder graficar dos variables o más en un mismo eje.

norm_countries_comp<-countries_comp%>%
  pivot_longer(cols = c(norm_lifeexpc,norm_gdppc),names_to = "metric",values_to = "norm_value")

Vizualización de la comparación con variables normalizadas

norm_countries_comp%>%
  ggplot(aes(x=year,
             y=norm_value,
             color=country,
             linetype=metric))+
  geom_line(linewidth=1.1)+
  theme_linedraw()+
  theme_linedraw()+
  labs(title="Compared evolution: life expectation and GDP per cápita in five countries (1952-2007)",
       x="Year",
       y="Normalized value",
       color="Country",
       linetype="Metric")

Véamos ahora lo mismo pero por páneles, según la pertenencia de cada país a su respectivo continente.

norm_countries_comp%>%
  ggplot(aes(x=year,
             y=norm_value,
             color = country,
             linetype = metric))+
  geom_line(size=1.2)+
  theme_linedraw()+
  facet_wrap(~continent)+
  labs(title="Compared evolution: life expectation and GDP per cápita in five countries (1952-2007)",
       x="Year",
       y="Normalized value",
       color="Country",
       linetype="Metric")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

En los gráficos anteriores se revela la correlación positiva entre el PIB per cápita y la expectativa de vida: a mayor riqueza de un país, mayor es la longevidad de su población. Un punto crucial, como ya se había expuesto anteriormente, es la presencia de rendimientos decrecientes. Los primeros aumentos de riqueza en países de bajos ingresos generan mejoras sustanciales en la expectativa de vida (por ejemplo, por mejoras en salud y saneamiento). Sin embargo, a medida que los países se vuelven más ricos, cada incremento adicional en el PIB per cápita produce aumentos progresivamente menores en los años de vida. La evolución temporal de países como Australia, con ingresos altos, en comparación con Somalia, con alta dependencia y pobreza, expresa la dinámica de desigual de desarrollo en un sistema interdependiente, donde existe un estancamiento económico en la periferia del sistema global y se mantiene el crecimiento y la expansión de los miembros del eje occidental integrado.